#include "comm.hpp"

int main()
{
    std::cout<<"client begin"<<std::endl;
    int wfd = open(NAMED_PIPE, O_WRONLY);
    std::cout<<"client end"<<std::endl;
    if (wfd < 0) exit(1);

    // write
    char buffer[1024];
    while(true)
    {
        std::cout<<"Please say: "<<std::endl;
        fgets(buffer, sizeof(buffer)-1, stdin);//fgets最多只会读取第二个参数-1的大小，给buffer中最后的\0预留空间，所以不-1也没关系，-1更加安全一些

        //不会存在下标为-1的情况，因为stdin至少都要输入一个字符\n，下面顶多是\0空字符。
        //所以即使if不判断，也没有问题。但是写上就 纯天然无污染，所以写上还是挺好的。
        if(strlen(buffer) > 0) buffer[strlen(buffer)-1] = 0;//将键盘输入的\n置为0，buffer: abcd\n\0 --> abcd\0\0

        ssize_t n = write(wfd, buffer, strlen(buffer));
        assert(n == strlen(buffer));
        (void)n;

        // 底层调用的都是write，我们就不用这些语言级接口了
        // std::string str;
        // std::getline(std::cin, str);
    }

    // 在测试时，可以不用在while循环中加判断条件，调整客户端输入次数什么的。
    //直接杀死客户端进程即可，那么管道文件的wfd也会自动的关闭，所以写不写close都无所谓。

    close(wfd);//客户端关闭wfd之后，服务器会读到0，则服务器进程会退出，不会阻塞等待。实际测试时，代码执行不到这里。

    return 0;
}